Hugging Face peft
Hugging Face 的 peft 库是一种实现参数高效微调(Parameter-Efficient Fine-Tuning,PEFT)的方法,它可以有效地将预训练的语言模型(PLMs)适应到各种下游应用,而无需微调所有模型的参数。微调大规模 PLMs 通常代价高昂,因此,PEFT 方法只微调少量(额外的)模型参数,从而大大降低了计算和存储成本。最新的 SOTA PEFT 技术实现了与全微调相当的性能。
peft 库与 Hugging Face Accelerate 库无缝集成,支持利用 DeepSpeed 和 Big Model Inference 来处理大规模模型。它支持的方法包括:
- LoRA:低秩适应大型语言模型
- Prefix Tuning:优化连续提示以进行生成,P-Tuning v2:提示调整可以在各种规模和任务中与微调相媲美
- P-Tuning:GPT 也能理解
- Prompt Tuning:参数高效提示调整的规模力量
- AdaLoRA:参数高效微调的自适应预算分配
- IA3:通过抑制和放大内部激活来注入适配器
peft 库提供了一些使用案例,包括使用消费级硬件通过适应 LLMs 来获得与全微调相当的性能,以及参数高效调整扩散模型等。此外,peft 库还支持使用 Accelerate 进行分布式训练和推理,以及使用 Accelerate 的 DeepSpeed 集成进行 PEFT 模型训练等。
主题
使用 peft 库
以下是一个简单的示例,展示了如何使用 peft 库进行模型微调:
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig(
task_type=TaskType.SEQ_2_SEQ_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1
)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
# output: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282
peft 库的应用场景
peft 库可以应用于各种场景,包括:
- 通过适应 LLMs 来获得与全微调相当的性能
- 参数高效调整扩散模型
- 保存计算和存储,即使对于中等和小型模型
- 使用 Accelerate 进行分布式训练和推理
- 使用 Accelerate 的 Big Model 推理功能进行 PEFT 模型推理
支持的模型
peft 库支持各种模型,包括 GPT-2、Bloom、OPT、GPT-Neo、GPT-J、GPT-NeoX-20B、LLaMA、ChatGLM、T5、BART、BERT、RoBERTa、Deberta、Deberta-v2 等。
本文作者:Maeiee
本文链接:Hugging Face peft
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!